準備技術:
一般修改Class內容,透過JavaIO上載xml去改比較直覺,但是上載程式不簡單,所以Jaxb提供簡單方式。
首先寫一個Java bean ,加上Jaxb的annotation表示xml的對應。
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Student {
String name;
int age;
int id;
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
@XmlElement
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
@XmlAttribute
public void setId(int id) {
this.id = id;
}
}
然後寫個xml檔案,輸入想改的內容。
然後寫個Java程式看更改內容狀況,年紀應該改成29。
import java.io.InputStream;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import model.Student;
public class JaxbRun {
public static void main(String[] args){
JaxbRun p = new JaxbRun();
p.XmlToBean();
}
private void XmlToBean() {
try {
//Hook the xml file
InputStream ins =JaxbRun.class.getClassLoader().getResourceAsStream("student.xml");
//xml get class structure
JAXBContext jaxbContext = JAXBContext.newInstance(Student.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
//Binding the xml
Student customer = (Student) jaxbUnmarshaller.unmarshal(ins);
//Show bean result.
System.out.println(customer.getAge());//Result is 29
}
catch (JAXBException e) {
e.printStackTrace();
}
}
}
上面的程式要注意,xml的檔案放置位置是相對路徑。
參考資料:
Day 25 結束